
/**
 * @param {character[]} tasks
 * @param {number} n
 * @return {number}
 */
 var leastInterval = function(tasks, n) {
  // 首先记录task中字符出现的次数
  let map = {}
  for(let key of tasks){
      map[key] = map[key] === undefined ? 1 : (map[key]+1)
  }
  // 定义最大次数
  let max = 0
  // 定义最大次数的元素个数
  let maxCount = 0
  for(let key in map){ // 遍历map
      if(map[key] > max){ // 如果这个key的值是大于当前的最大值 name更新最大值 更新最大次数的元素个数为1
          max = map[key]
          maxCount = 1
      }else if(map[key] === max){
          // 如果当前这个key的值等于当前最大值 那么这个最大次数的元素个数++
          maxCount++
      }
  }
  let res = (max-1) * (n+1) + maxCount // 计算最少任务数
  return Math.max(res,tasks.length) // 返回最小任务数和元素个数的最大值
};
